{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as mpatches\n",
    "import os\n",
    "import pandas as pd\n",
    "from ast import literal_eval\n",
    "import textwrap as tw\n",
    "\n",
    "algo_names = [\"tsne\", \"umap\", \"trimap\", \"pacmap\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load datasets\n",
    "# Set to True if you want to load the narrative datasets (subjected to copyrigth), False for MNIST only\n",
    "NARRATIVES = True\n",
    "if NARRATIVES:\n",
    "    datasets_names = [\"rts\", \"pdl\", \"ioc\", \"mjf\"]\n",
    "else:\n",
    "    datasets_names = [\"mnist\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading results/rts/eval_rts_pacmap_N60000.csv\n",
      "Loading results/rts/eval_rts_umap_N60000.csv\n",
      "Loading results/rts/eval_rts_trimap_N60000.csv\n",
      "Loading results/rts/eval_rts_tsne_N60000.csv\n",
      "Loading results/pdl/eval_pdl_tsne_N60000.csv\n",
      "Loading results/pdl/eval_pdl_pacmap_N60000.csv\n",
      "Loading results/pdl/eval_pdl_trimap_N60000.csv\n",
      "Loading results/pdl/eval_pdl_umap_N60000.csv\n",
      "Loading results/ioc/eval_ioc_umap_N60000.csv\n",
      "Loading results/ioc/eval_ioc_pacmap_N60000.csv\n",
      "Loading results/ioc/eval_ioc_tsne_N60000.csv\n",
      "Loading results/ioc/eval_ioc_trimap_N60000.csv\n",
      "Loading results/mjf/eval_mjf_trimap_N60000.csv\n",
      "Loading results/mjf/eval_mjf_umap_N60000.csv\n",
      "Loading results/mjf/eval_mjf_pacmap_N60000.csv\n",
      "Loading results/mjf/eval_mjf_tsne_N60000.csv\n",
      "Loaded 16 evaluation results\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dataset_algo</th>\n",
       "      <th>neighbor_kept_ratio</th>\n",
       "      <th>global_score</th>\n",
       "      <th>dist_corr</th>\n",
       "      <th>run_time</th>\n",
       "      <th>eval_settings</th>\n",
       "      <th>rta_local</th>\n",
       "      <th>rta_global</th>\n",
       "      <th>rta_all</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rts_tsne_run0</td>\n",
       "      <td>0.333628</td>\n",
       "      <td>0.935409</td>\n",
       "      <td>0.184556</td>\n",
       "      <td>266.591517</td>\n",
       "      <td>{'n_points': 60000, 'n_neighbors': 50, 'n_samp...</td>\n",
       "      <td>0.524667</td>\n",
       "      <td>0.646380</td>\n",
       "      <td>0.64692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>rts_tsne_run1</td>\n",
       "      <td>0.333392</td>\n",
       "      <td>0.935306</td>\n",
       "      <td>0.184565</td>\n",
       "      <td>271.323282</td>\n",
       "      <td>{'n_points': 60000, 'n_neighbors': 50, 'n_samp...</td>\n",
       "      <td>0.605000</td>\n",
       "      <td>0.642978</td>\n",
       "      <td>0.64347</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>rts_tsne_run2</td>\n",
       "      <td>0.333217</td>\n",
       "      <td>0.935270</td>\n",
       "      <td>0.185237</td>\n",
       "      <td>272.536645</td>\n",
       "      <td>{'n_points': 60000, 'n_neighbors': 50, 'n_samp...</td>\n",
       "      <td>0.633833</td>\n",
       "      <td>0.642666</td>\n",
       "      <td>0.64312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>rts_tsne_run3</td>\n",
       "      <td>0.333590</td>\n",
       "      <td>0.935346</td>\n",
       "      <td>0.184124</td>\n",
       "      <td>275.004447</td>\n",
       "      <td>{'n_points': 60000, 'n_neighbors': 50, 'n_samp...</td>\n",
       "      <td>0.610500</td>\n",
       "      <td>0.645155</td>\n",
       "      <td>0.64565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>rts_tsne_run4</td>\n",
       "      <td>0.333301</td>\n",
       "      <td>0.935342</td>\n",
       "      <td>0.185057</td>\n",
       "      <td>271.709616</td>\n",
       "      <td>{'n_points': 60000, 'n_neighbors': 50, 'n_samp...</td>\n",
       "      <td>0.710000</td>\n",
       "      <td>0.646176</td>\n",
       "      <td>0.64668</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    dataset_algo  neighbor_kept_ratio  global_score  dist_corr    run_time  \\\n",
       "0  rts_tsne_run0             0.333628      0.935409   0.184556  266.591517   \n",
       "1  rts_tsne_run1             0.333392      0.935306   0.184565  271.323282   \n",
       "2  rts_tsne_run2             0.333217      0.935270   0.185237  272.536645   \n",
       "3  rts_tsne_run3             0.333590      0.935346   0.184124  275.004447   \n",
       "4  rts_tsne_run4             0.333301      0.935342   0.185057  271.709616   \n",
       "\n",
       "                                       eval_settings  rta_local  rta_global  \\\n",
       "0  {'n_points': 60000, 'n_neighbors': 50, 'n_samp...   0.524667    0.646380   \n",
       "1  {'n_points': 60000, 'n_neighbors': 50, 'n_samp...   0.605000    0.642978   \n",
       "2  {'n_points': 60000, 'n_neighbors': 50, 'n_samp...   0.633833    0.642666   \n",
       "3  {'n_points': 60000, 'n_neighbors': 50, 'n_samp...   0.610500    0.645155   \n",
       "4  {'n_points': 60000, 'n_neighbors': 50, 'n_samp...   0.710000    0.646176   \n",
       "\n",
       "   rta_all  \n",
       "0  0.64692  \n",
       "1  0.64347  \n",
       "2  0.64312  \n",
       "3  0.64565  \n",
       "4  0.64668  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load evaluation results\n",
    "evaluation_results_df = []\n",
    "\n",
    "N_POINTS = 60000\n",
    "\n",
    "for dataset in datasets_names:\n",
    "    results = os.listdir(f\"results/{dataset}\")\n",
    "    results = [r for r in results if r.endswith(\".csv\")]\n",
    "    for result in results:\n",
    "        if str(N_POINTS) not in result:\n",
    "            continue\n",
    "        print(f\"Loading results/{dataset}/{result}\")\n",
    "        evaluation_results_df.append(pd.read_csv(f\"results/{dataset}/{result}\"))\n",
    "\n",
    "print(f\"Loaded {len(evaluation_results_df)} evaluation results\")\n",
    "evaluation_results_df = pd.concat(evaluation_results_df)\n",
    "evaluation_results_df.rename(columns={\"index\": \"dataset_algo\"}, inplace=True)\n",
    "\n",
    "evaluation_results_df[\"rta_local\"] = evaluation_results_df[\"rta\"].map(lambda x: eval(x)[\"local\"][0])\n",
    "evaluation_results_df[\"rta_global\"] = evaluation_results_df[\"rta\"].map(lambda x: eval(x)[\"global\"][0])\n",
    "evaluation_results_df[\"rta_all\"] = evaluation_results_df[\"rta\"].map(lambda x: eval(x)[\"all\"][0])\n",
    "evaluation_results_df.drop(columns=[\"rta\"], inplace=True)\n",
    "\n",
    "evaluation_results_df[\"dist_corr\"] = evaluation_results_df[\"dist_corr\"].map(lambda x: eval(x)[0])\n",
    "\n",
    "evaluation_results_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dataset_algo</th>\n",
       "      <th>neighbor_kept_ratio</th>\n",
       "      <th>global_score</th>\n",
       "      <th>rta_local</th>\n",
       "      <th>rta_global</th>\n",
       "      <th>rta_all</th>\n",
       "      <th>dist_corr</th>\n",
       "      <th>run_time</th>\n",
       "      <th>dataset</th>\n",
       "      <th>algo</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ioc_pacmap</td>\n",
       "      <td>(0.026187413898558897, 0.0)</td>\n",
       "      <td>(0.409151661235834, 0.0)</td>\n",
       "      <td>(0.35174285714285713, 0.03566009142138317)</td>\n",
       "      <td>(0.5404260615265564, 0.0014639305721472731)</td>\n",
       "      <td>(0.540568, 0.0015004399354855795)</td>\n",
       "      <td>(0.2405991428201227, 0.000797130712508508)</td>\n",
       "      <td>(3.222450351715088, 0.10880248166437556)</td>\n",
       "      <td>ioc</td>\n",
       "      <td>pacmap</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ioc_trimap</td>\n",
       "      <td>(0.026161119018629296, 0.0)</td>\n",
       "      <td>(0.4091827482027899, 0.0)</td>\n",
       "      <td>(0.3648142857142857, 0.05713979797807795)</td>\n",
       "      <td>(0.5396935681977997, 0.00314168596367872)</td>\n",
       "      <td>(0.539842, 0.003146747174111391)</td>\n",
       "      <td>(0.24445598502779048, 0.0007430744112692066)</td>\n",
       "      <td>(5.501059293746948, 0.08786125682564178)</td>\n",
       "      <td>ioc</td>\n",
       "      <td>trimap</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ioc_tsne</td>\n",
       "      <td>(0.4816803571530647, 0.00017261562299728428)</td>\n",
       "      <td>(0.7228236289244305, 0.0006432110050039402)</td>\n",
       "      <td>(0.6139, 0.0645118058917529)</td>\n",
       "      <td>(0.6811185620238746, 0.0012900662861789472)</td>\n",
       "      <td>(0.6816500000000001, 0.0012512393855694049)</td>\n",
       "      <td>(0.2028060094441461, 0.0010239398483940993)</td>\n",
       "      <td>(165.61448602676393, 2.672074966592793)</td>\n",
       "      <td>ioc</td>\n",
       "      <td>tsne</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ioc_umap</td>\n",
       "      <td>(0.3223666535192267, 0.0010624203850383247)</td>\n",
       "      <td>(0.7132636209446772, 0.018341758620592164)</td>\n",
       "      <td>(0.6535333333333333, 0.10803214909505059)</td>\n",
       "      <td>(0.6832434703362399, 0.008089450434309118)</td>\n",
       "      <td>(0.683784, 0.00806275989614325)</td>\n",
       "      <td>(0.2257241799495399, 0.004881481528131968)</td>\n",
       "      <td>(7.259605407714844, 0.08646295466889903)</td>\n",
       "      <td>ioc</td>\n",
       "      <td>umap</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>mjf_pacmap</td>\n",
       "      <td>(0.0189616895791969, 0.0)</td>\n",
       "      <td>(0.2629573959440064, 0.0)</td>\n",
       "      <td>(0.42661904761904756, 0.0395002188633105)</td>\n",
       "      <td>(0.5099513455207003, 0.0009467777533181068)</td>\n",
       "      <td>(0.50997, 0.0008681877677092575)</td>\n",
       "      <td>(0.20610608366913735, 0.00045218321111474655)</td>\n",
       "      <td>(3.1921221733093263, 0.13055055753552902)</td>\n",
       "      <td>mjf</td>\n",
       "      <td>pacmap</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  dataset_algo                           neighbor_kept_ratio  \\\n",
       "0   ioc_pacmap                   (0.026187413898558897, 0.0)   \n",
       "1   ioc_trimap                   (0.026161119018629296, 0.0)   \n",
       "2     ioc_tsne  (0.4816803571530647, 0.00017261562299728428)   \n",
       "3     ioc_umap   (0.3223666535192267, 0.0010624203850383247)   \n",
       "4   mjf_pacmap                     (0.0189616895791969, 0.0)   \n",
       "\n",
       "                                  global_score  \\\n",
       "0                     (0.409151661235834, 0.0)   \n",
       "1                    (0.4091827482027899, 0.0)   \n",
       "2  (0.7228236289244305, 0.0006432110050039402)   \n",
       "3   (0.7132636209446772, 0.018341758620592164)   \n",
       "4                    (0.2629573959440064, 0.0)   \n",
       "\n",
       "                                    rta_local  \\\n",
       "0  (0.35174285714285713, 0.03566009142138317)   \n",
       "1   (0.3648142857142857, 0.05713979797807795)   \n",
       "2                (0.6139, 0.0645118058917529)   \n",
       "3   (0.6535333333333333, 0.10803214909505059)   \n",
       "4   (0.42661904761904756, 0.0395002188633105)   \n",
       "\n",
       "                                    rta_global  \\\n",
       "0  (0.5404260615265564, 0.0014639305721472731)   \n",
       "1    (0.5396935681977997, 0.00314168596367872)   \n",
       "2  (0.6811185620238746, 0.0012900662861789472)   \n",
       "3   (0.6832434703362399, 0.008089450434309118)   \n",
       "4  (0.5099513455207003, 0.0009467777533181068)   \n",
       "\n",
       "                                       rta_all  \\\n",
       "0            (0.540568, 0.0015004399354855795)   \n",
       "1             (0.539842, 0.003146747174111391)   \n",
       "2  (0.6816500000000001, 0.0012512393855694049)   \n",
       "3              (0.683784, 0.00806275989614325)   \n",
       "4             (0.50997, 0.0008681877677092575)   \n",
       "\n",
       "                                       dist_corr  \\\n",
       "0     (0.2405991428201227, 0.000797130712508508)   \n",
       "1   (0.24445598502779048, 0.0007430744112692066)   \n",
       "2    (0.2028060094441461, 0.0010239398483940993)   \n",
       "3     (0.2257241799495399, 0.004881481528131968)   \n",
       "4  (0.20610608366913735, 0.00045218321111474655)   \n",
       "\n",
       "                                    run_time dataset    algo  \n",
       "0   (3.222450351715088, 0.10880248166437556)     ioc  pacmap  \n",
       "1   (5.501059293746948, 0.08786125682564178)     ioc  trimap  \n",
       "2    (165.61448602676393, 2.672074966592793)     ioc    tsne  \n",
       "3   (7.259605407714844, 0.08646295466889903)     ioc    umap  \n",
       "4  (3.1921221733093263, 0.13055055753552902)     mjf  pacmap  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scalar_metrics = [\"neighbor_kept_ratio\", \"global_score\", \"rta_local\", \"rta_global\", \"rta_all\", \"dist_corr\", \"run_time\"]\n",
    "\n",
    "scalar_metrics_df = evaluation_results_df[[\"dataset_algo\"] + scalar_metrics]\n",
    "scalar_metrics_df[\"run\"] = scalar_metrics_df[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[2].replace(\"run\", \"\")).astype(int)\n",
    "scalar_metrics_df[\"dataset_algo\"] = scalar_metrics_df[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[0] + \"_\" + x.split(\"_\")[1])\n",
    "scalar_metrics_df = scalar_metrics_df.groupby([\"dataset_algo\"])[scalar_metrics].agg([\"mean\", \"std\"])\n",
    "scalar_metrics_df.columns = ['_'.join(col).strip() for col in scalar_metrics_df.columns.values]\n",
    "scalar_metrics_df = scalar_metrics_df.apply(lambda row: [(row[f\"{metric}_mean\"], row[f\"{metric}_std\"]) for metric in scalar_metrics], axis=1, result_type='expand')\n",
    "scalar_metrics_df.columns = scalar_metrics\n",
    "scalar_metrics_df.reset_index(inplace=True)\n",
    "scalar_metrics_df[\"dataset\"] = scalar_metrics_df[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[0])\n",
    "scalar_metrics_df[\"algo\"] = scalar_metrics_df[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[1])\n",
    "scalar_metrics_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Round all values to 3 decimal places\n",
    "scalar_metrics_df_to_save = scalar_metrics_df.copy()\n",
    "for metric in scalar_metrics:\n",
    "    scalar_metrics_df_to_save[metric] = scalar_metrics_df_to_save[metric].apply(lambda x: (round(x[0], 3), round(x[1], 3)))\n",
    "scalar_metrics_df_to_save.to_csv(\"results/scalar_metrics_sample60k.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx4AAAPmCAYAAABq+0lKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA5TRJREFUeJzs3XlcVPX+x/H3AWRxwwTFDdE0lyvXSr2VW1mZZeWWpV3X3Mprmopaot1cKqlMo0VNEzXTTK00LTe03DJbSHPDFjcUER1UUGQROL8/+DHXiUVAhxng9Xw85vFgvuf7Pedz7ATzme9mmKZpCgAAAADsyMXRAQAAAAAo+Ug8AAAAANgdiQcAAAAAuyPxAAAAAGB3JB4AAAAA7I7EAwAAAIDdkXgAAAAAsDs3RweAkuHq1atKT093dBgAAAAlkqurq8qUKePoMG4IiQduSEJCgiwWi1JSUhwdCgAAQInm4eEhX19fVaxY0dGhFAqJBwotISFB0dHRKl++vHx9fVWmTBkZhuHosAAAAEoU0zR19epVxcfHKzo6WpKKZfJhmKZpOjoIFE9Hjx5VmTJlVKtWLRIOAAAAOzNNU6dOndLVq1d16623OjqcAmNyOQrl6tWrSklJkbe3N0kHAABAETAMQ97e3kpJSdHVq1cdHU6BkXigULImkhf3SU4AAADFSdZnr+K4qA+JB24IvR0AAABFpzh/9iLxAAAAAGB3JB4AAAAA7I7ldGE3UReuyJKY6ugwcuRbzl21bynr6DBwHemXo5SRYnF0GNm4ePjKtXxtR4eBQoi6fEGW5ERHh5EjX89yql3+FkeHAQdIvZiotETn3A/LrZyH3CuVc3QYKCFIPGAXUReuqOEb3yk5LcPRoeTI081Fv4+/n+TDiaVfjtLZVQ2l9GRHh5Kdq6eqdvud5KOYibp8QQ2/fFPJ6WmODiVHnq5u+v2Jl0g+SpnUi4k6MPMbmU7699Jwc1Fg0GMkH7gpGGoFu7Akpjpt0iFJyWkZN9QbYxhGgV5Zrly5omnTpqlZs2YqX768PD09VatWLbVt21bBwcE6cuSIzXXatWsnwzDk5eWlU6dO5RhLnTp15OnpaVO2devW68bUtWvXQt9/UchIsThn0iFJ6ck3pScm67/TM888U6A6Wc+FYRjasGFDrm2bNWtmrbd79+5c673yyisyDEMeHh6Ki4vLtd611zUMQy4uLrrlllt07733atGiRXL2baEsyYlOm3RIUnJ6WqF7YwrzO+n48ePZysuUKaOaNWuqR48e+uWXX3K81jPPPJPjM5V1Di8vL128eDHHtnFxcfLw8JBhGNl+b/3dvffeK8Mw1KJFiwLdu5ubm6pXr66uXbtq+/btebZ1BmmJKU6bdEiSmZZxw70xOT1r7u7u8vf3V69evbRv375sbb799ltr3a+//vq614iOjlZwcLCaNWumSpUqyd3dXdWrV9djjz2mRYsWKTX1f3/zr/0bec899+R6zjVr1ljrPfLII7nWu3TpksqXLy/DMDR27Nhc6+X0t9nT01O33nqrhgwZouPHj1/3Pos7ejyAQpg0aVK2silTpsjb21ujRo3Ksc2lS5fUpk0b7du3T/Xr11efPn1UqVIlnTx5UgcPHtQbb7yhevXqqV69etnaJicn65VXXtGCBQsKFGfz5s31+OOP53isUaNGBToXnI+bm5sWLFiQ4x/E3377TXv27JGbm5vS0nL/sJ2RkaGPP/5YhmEoNTVVS5Ys0ciRI/O87pgxY1S+fHmlp6fr6NGj+vLLL7Vjxw5FRETo/fffv+H7QsEV5ndSlnr16qlPnz6SpMTEREVERGjlypVavXq1Nm/erHvvvTffcbi5uSk5OVmffvqphg0blu34J598otTUVLm55f3x488//9SOHTtkGIYiIiL022+/6fbbb8+1vo+Pj4YPHy5JSkpK0m+//aavvvpKa9as0YoVK/Tkk0/m+x5gP9c+a5cvX9bu3bu1bNkyffnll/r222/VqlUra92sv3eGYSgsLCzXv2WStGzZMg0aNEhJSUlq3ry5+vTpI29vb505c0bffvutBgwYoE8++URbtmyxaefm5qYff/xRhw4d0j/+8Y9s512wYMF1f4dK0vLly5WYmCjDMLR48WKFhITkud3AtX+bL168qK1bt2r+/Pn64osv9NNPP6l+/fp5Xq84I/EACmHy5MnZyqZMmaJKlSrleEySQkNDtW/fPg0aNEgfffRRtuXwjh07ppSUnL9VqlevnhYvXqwxY8aoSZMm+Y6zRYsWucaD4q9jx4766quvFBcXJx8fH5tjYWFhcnNz00MPPaT169fneo7w8HBFRUXpP//5jxYvXqywsLDrJh5jx45VtWrVrO/379+vu+++W7NmzVJQUJDq1q17YzeGAivM76Qs9evXz1bnjTfeUHBwsP773/9q27Zt+Y6jXr16Mk1TCxYsyDHxWLhwoZo2bar4+HidOXMm1/NkfegcM2aM3n77bYWFhem9997Ltb6vr2+2e5g/f76GDBmicePGkXg4iZyetZdfflmvv/66Jk6cqO+++05S5ofxL7/8UnfddZc8PT319ddfKzY2Vn5+ftnOuWHDBusXeV999ZUeeughm+OmaWr16tWaP39+trYPP/yw1q9frwULFujtt9+2OXb27FmtW7dOjz76qNasWZPnfYWFhcnDw0PPPvus3n//fa1du1ZPPPFErvX//rfZNE31799fn3zyiV5//XUtXLgwz+sVZwy1AorIDz/8IEkaPnx4jmtw161bN9deiNdee03p6ekKDg62a4woXgYMGKDU1FQtXbrUpjw1NVWffvqpHnvsMVWtWjXPc4SFhUmShg0bpm7dumn//v36+eefCxTHP//5T913330yTVMREREFuwk4pUGDBklSof57PvPMM4qIiMg2fOaXX37Rvn37NGDAgDzbp6en6+OPP5afn5+mTZum2rVra+nSpbl+MZObgQMHqly5cjp+/LgsFudbpAKZRowYIUk2v3c+/fRTJSUlqW/fvurXr5/S0tK0ePHibG3T09P1/PPPKyMjQytWrMiWdEiZPSbdunXTl19+me1YrVq11L59e33yySfZejUWL16sq1evXvd5PXTokHbv3q3HH3/c+qVN1u/V/DIMQ88//7wkFfj3b3FD4gEUkcqVK0uS/vrrrwK3bdeunTp27Ki1a9dq586dNzs0FFMtW7ZU48aNs307tnr1asXFxWngwIF5to+Li9NXX32lO++8U4GBgerXr5+kgv/RRMl1vSFROenfv79cXV2zPZcLFiyQu7u7dahNbtatW6eYmBj16tVLZcqUUZ8+fXT+/HmtWrWqwLE4+7wj5LwZXlhYmMqUKaOnn35aTz31lLy8vHL8vfTdd9/p6NGjatWqlR588ME8r+Ph4ZFj+cCBA3X27Fl98803NuULFy7UnXfeqTvuuCPP82bF1a9fP9WrV0+tWrXSxo0bFR0dnWe70orEAygiTz31lKTMbxLHjx+vb7/9VhcuXMh3+zfeeEMuLi566aWX8t3ml19+0eTJk3N85TXZGMXHgAEDtHfvXu3Zs8daFhYWJj8/Pz366KN5ts0ab9+3b19J0oMPPqhatWpp2bJlunLlSr5j2L9/v7Zt25avicAoHubOnStJatOmTYHb1qhRQw8//LCWLFmiq1evSsqcp7Zs2TJ16tRJvr6+ebbP+iCX9Vz279/fpjy/FixYoCtXrqhOnTrXvSYcJ2sI3b/+9S9J0t69e/Xrr7+qY8eO8vX1VcWKFdW1a1f9/vvv+v77723aZr1/4IEHCn39rl27qnLlyjZzKH/44QcdOnToul/eXL16VZ988ol8fHzUsWNHSZnPa3p6uhYtWpTvGEzT1AcffCDpf/8OJRVzPIAi0qVLF7311luaOnWq3nzzTb355puSMsdEP/LIIxo5cqRuu+22XNs3bdpUvXr10pIlS7R69ep8rUoVERGR61CJSpUq5bmaB4qHfv36acKECVqwYIHef/99nTx5Ups3b9aYMWOu+231ggUL5Orqqn//+9+SJBcXF/Xu3VtvvvmmPv/8c2sPyN+9/fbb2SaXJycn64UXXlCdOnVu9i3Czv766y/rePPExET9/PPP2rZtm6pWrarp06cX6pwDBw7UunXrtGbNGnXv3l1ffPGFLl68eN0PcrGxsfrmm2/UpEkT3XnnnZKkBg0a6O6779aWLVt04sQJBQQEZGtnsVis95CcnKy9e/dq48aNcnFxyTZ2H45z7bOWNbn8+++/l6enp6ZNmyYpe+IpZf6eW7ZsmcLCwtS6dWtredY8oVq1ahU6Jg8PD/Xq1UsffvihdR7JggULrOUJCQm5tl2zZo3OnTun559/3jqZvEePHho5cqQWLFigCRMm5Nijk/WloCTFx8fru+++02+//abKlStr4sSJhb6X4oAeD6AIjRs3TqdPn9aKFSs0atQotWnTRlFRUZo1a5aaNm163Qlsr732mjw8PDRhwgSlp6df93rPPfecTNPM8XW9lW5QPGT1bHz66adKSUnRokWLlJGRcd1xyT/99JP279+vhx56yGaieNa3y3mtoDZjxgxNmTJFr7/+ur755hv961//0qJFixQaGnpT7glF68iRI5oyZYqmTJmit99+25p07NixQ40bNy7UOTt37ixfX1/rc7RgwQJrT0hePv74Y6Wlpdl86JQyP3iappnrpNu4uDibe9i7d6+6du2qrVu3qnv37oW6B9x81z5r7733nk6cOKFevXrpp59+UsuWLZWSkqKlS5eqUqVK6tSpk7XdQw89pOrVq2vFihW6fPnyTY9r4MCB1nkkV65c0YoVK6w9IXnJKUnKiv3o0aO5LswQERFh/XeYPXu2EhISNGTIEP36668lekUricQDKHIVKlTQU089pXfeeUc7duzQuXPnNGzYMCUnJ2vQoEE2a43/XUBAgP7zn/8oMjKyRK96UVq4uGT+Cs7IyH0N/6xjWXVzMmDAAOsY+EWLFumee+657gfGrA+Ef/+A17hxY7Vo0ULbtm3LdT5STEyMTNNURkaGLl68qO3bt6t///45frMH5/fwww9bv5A4e/aspk+fLovFoq5duxb6Q16ZMmXUu3dvbdy4Ubt27dJ3332nfv36ydXVNc92CxcutPa8Xevpp5+Wu7u7Fi5cmOP/Lw0bNrTeQ1pams6cOaNVq1apbdu2hYof9nHts5aamqqTJ09q6dKl+uc//ylJWrVqlS5cuKCnnnrKZk6Gq6urevfurcTERC1fvtxanvWlyY3Op8iay7Fw4UKtXLlSCQkJ1/3yJjo6Wps2bdJtt92mu+++2+bY9YYHXvulYEpKio4ePap58+bl2JtX0pB4AA7m7e2tDz74QAEBAbJYLNq/f3+e9V9++WVVrFhRkydPVlJSUhFFCXvw9vaWpDw37ctajSerbk4ef/xx+fn5aezYsTp69Oh1h7NcuXJFy5YtkyT17t0724ZWWRvHFXTfGBR/VapU0dixYzVhwgRFRkbq5ZdfLvS5Bg0apPT0dPXo0UOmaV73ufz+++91+PBhZWRkyN/f3+aZ9PHxUWpqqqKiorR58+ZCxwTnlvVBPWvJ+WtfWUPmrv0wnzXs6u/7cxTGgAEDFBkZqYkTJ8rf3z/HFbKutWjRIqWnp+vPP//MFmvWHh1ffPGF4uPjbzi2koQ5HoATMAxDZcuWzVddHx8fvfjii3r55ZfzXNcezq9hw4Zyd3fXzz//rLS0tBznZGQtw9y0adNcz+Pm5qY+ffpoxowZKlu2rHr27JnndT///HMlJCTojjvuUPPmzXOss3jxYn388cd69dVXr/stNUqerHlDs2fP1qhRowo1d+ef//ynmjdvroiICLVp0ybPOWzS/z5QduzYUTVq1Mh2PC4uTqtXr1ZYWJg6dOhQ4Hjg3I4fP64tW7bIz88v180Cw8PD9cMPPygyMlKNGzfW/fffr1tvvdXaq3b//ffnev6UlJRcV7aSpD59+ujFF19UdHS0Xn755Tx7mbOG/RmGoWeeeSbHugcOHNCPP/6oTz/9VP/5z3/yuPPShcQDKCJz585Vs2bNclyx4ssvv9Thw4dVqVIlBQYGXvdco0eP1qxZs/TGG2/wobAY8/T0VI8ePbRkyRK99tpr2TbW2r9/v+bPn68KFSqoW7dueZ5r3LhxatOmjXUVmLxkfcB755131K5duxzrZA3dWr9+fZ47BqNk8vLy0ksvvaSRI0fq1VdfLfQSyx9//LH+/PPPXPcoynL58mWtWLFC5cqV04oVK1S+fPlsddLS0lSzZk3rctF/3zQTxdvChQtlmqaGDh2a66aX7733nkaOHKmwsDC9/fbbcnV11axZs/TYY4+pR48eWr58eY4rXK1du1bz5s3T2rVrc71+5cqVtXHjRl24cOG6q7lt3bpVR44c0X333Zdrz/C+fft0++23KywsjMTjGiQeQBFZv369hg4dqvr166t169aqUaOGLl++rL1792rHjh1ycXHR7Nmz8/xGJkvZsmU1adIkDR06VFLu65Nfu3LG31WqVIkJ5k5gxowZ+vHHHzVlyhR9/fXXuu++++Tp6ak//vhDa9askWma1smWefHz88vXSmd//fWXtm/frltvvVX33XdfrvUGDBigVatWKSwsjMSjlHr22Wf15ptvavHixZowYYLq1atX4HM0adJETZo0uW69zz77TImJiRowYECOSYf0v569mTNnasmSJdbN2lD8ZWRkaNGiRdYehNz07t1b48aN0yeffKKQkBCVKVNGjzzyiD755BMNHjxYDz74oFq0aKGWLVuqQoUKio2NtSYJ7du3v24cef1OvFZWIp7X8MGmTZuqWbNmioiI0G+//abbb789X+cu6Ug8YBe+5dzl6eai5LTcJ806kqebi3zLuRfpNd988021bt1a4eHh2r59u2JiYiRJNWvWVP/+/TVixIhch73kZNCgQXrnnXf0+++/51onr+V0AwICnDrxcPHwlVw9pfRkR4eSnatnZnw3QdWqVfXzzz/rnXfe0erVqzV37lylpqaqWrVqevLJJzV27FjrsqI3Q9YfzAEDBuQ5Gbxjx47y8/PT119/bV1isrjz9SwnT1c3JaenXb+yA3i6usnXs5yjw7Dy9PRUcHCwRowYoSlTpuS4c/TNkp8PclLmcztz5kyFhYWVmMTDrZyHDDcXmU7699Jwc5Fbuet/IXYjwsPD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9ep65ZVXZBiGGjdurPT0dJ09e1bVqlXL1n7YsGEyTVMbNmywDq8KDg62DrHKbSNAAAAAADeP0yceU6ZMsf5ssVi0d+9enT17VqZpyjAMTZkyRdu2bdPVq1fVsmXLbO27dOmiF198MdtKWJI0fvx4dezYscjuBQAAACitnH5yeefOnfX5558rKChIJ06csJbXqVNHM2fOVKdOnXT58mUdO3ZMlSpVyvEcb7zxhp566imtXr1asbGx8vPzU9euXdW8eXNdvHgx13YAkJPIyMgCt0lKSrIucrFz5055eXkV+vq+vr6qXbt2odsDAOAITp94SFK3bt3UrVs3/fHHH7JYLKpSpYrNTuXly5dX+fLlre/Xr1+frSejefPm1vkeWeLj4/XQQw/p559/tu8NACgZEi/IxZD69OlzQ6f5+yp7BVXWy1ORh38n+QAAFCvFIvHI0qBBAzVo0OC69bp37661a9fqwQcfzLXO5cuX1aFDB/366683M0QAJVnKZWWY0gfPSvWrOyaEv2Kk4fOSZbFYSDwAAMWKUyYeAwcOlGEYCgsL08CBA/Osm1XvWsnJyerSpYvWrVune++9N1ubxMREPfLII/r555+tE84BIL/qV5ea1nF0FAAAFC9OmXgsWrRILi4uCgsL06JFi66bHPw98XBxcVFSUpIef/xxbdy40WbS+ZUrV/TYY49p165dkqTq1R30tSUAAABQijjtqlbX7tnx9xWp/r461d/NmzdPUuZwqo4dO1rncCQnJ6tz587avn27JMnPz09btmyx850AAAAAcMoej6xdxf/+c34NHDhQycnJGj58uBISEvTII4/o66+/1pQpU/Ttt99KkqpUqaLNmzerYcOGNy1uAAAAADlzysTjvvvuy/Hnghg2bJhSUlI0ZswYXbhwwWYVmcqVKys8PFxNmjS54VgBAAAAXJ9TJh45OXTokDZu3CiLxaLXX39dUVFRkqQaNWrIzS3n2xg9erRSUlI0YcIE67CsW265ReHh4WratGmRxQ4AAACUdsUi8ZgwYYLeeusta/Lw+uuvq1OnTjpw4IA+/vjjbGvq/30lrMqVK+v8+fMyDEP16tXT+++/bz2W06pYAAAAAG4up088Pv/8c73xxhvW91krXD333HMaPny4vv7662yJR04rYWW9j4iIUEREhM0xEg8AyL+oqChZLBaHxsDu7QBQ/Dh9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u7V7925t27ZNy5Yty1YnPT1diYmJSkxMVFRUlDZv3qzp06dr5cqVue4lBBTW1q1b1b17d50/f96m/PTp01q9erVWr16tHj16aOnSpXJz+9/Hifj4eHXv3l1btmyxaXf+/HmdP39e+/btU3p6ukJDQ4viNlCMfffddzpw4IACAwOtZe+9954DI8KNoscDpU7//v1lmqbOnDmjRx55RFLmt3Pvvfeejh8/LtM0ra+sZZKlzF+A1x575plndO7cOb3//vuSpNq1aysiIkLJyck6c+aMdu7cqZdeesnmHMC1sp7FpKQkzZ8/31r+2WefaefOnTZ177vvPpmmqUuXLmnr1q3WbwJPnz6tRx99VH/99VeRxo6S7dSpU+ratas16RgwYICioqKUlJSkNWvWqEqVKpKkFStWKDg42KZtjx49rElHtWrV9Nlnn+nixYtKSkpSRESEgoKC5OXlVbQ3hGLrgw8+sP4cGxurlStX3tD5Fi5caPO33DRNrV69+gajRH6ReKDU8vPz03/+8x/r+xMnThT4HH/99Zd1WEyDBg3UrFkzeXh4yM/PT61bt9Ybb7yhcePG3bSYUTJ5enpq0KBBNt/q7d69O8e65cuX13333adNmzapZcuWkjK/YZ4yZUqRxIrSYcaMGYqPj5ck/fOf/1RYWJj8/f3l6empTp06Wb9wkTK/gT537pwkKTw83Dp01TAMrVq1Sj179pS3t7c8PT3VrFkzzZgxQ6+++mrR3xSKlbp160qSlixZYh1SOnfuXKWmplqPofgh8UCpdu02NlWrVi1w+9q1a1t/3rx5s3X88ooVK3T69OmbEiNKj4Jsq+Tq6qrRo0db369Zs8aaBAM3av369dafBw4cKMMwbI4/9dRTqlSpkiQpNTVV3333nSTpq6++sta5//77dc899+R4/muHZgE56datm6pXr67ExEQtWLBAV69e1dy5cyVJw4YNc3B0KCwSD5RasbGxmjNnjvV93759C3yOmjVrqlevXtb3+/bt08yZM9WzZ0/VqlVLDzzwgA4ePHhT4kXJlZycrPnz59s8K1m9GXm5tockISFBcXFxdokPpU9UVJT151tvvTXbcRcXF9WpU8f6PqvH+NixY9ayJk2a2C9AlHhlypTRc889J0maNWuWVq5cqdOnT6ts2bIaNGhQoc87YMCAXBeLgf2ReKDU+fjjj2UYhqpV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vvnmG/3yyy/69ddfVa1aNQdHCQAAAJRsJb7HY9q0aYqNjZVpmjIMQ97e3jIMQ6ZpKjY2ViEhIY4OEQAAACjxSnyPx/r162UYhvr06aN3331XlSpV0sWLFzVy5Eh98sknWrdund59911HhwkAxYoj9zKR2MQQAIqjEp94nDx5UpIUGhqqSpUqSZIqVaqk0NBQffLJJzp16pQDowOAYiY+US7//2WOI5X18lIkmxgCQLFS4hMPNzc3paam6sKFC7rlllus5efPn7ceBwDk05VkZZimXu30vOr61nRICMcs0frv2llsYggAxUyJ/9TdsGFD7dmzRz169NDkyZMVEBCgEydOaOrUqdbjAICCqetbU42q1XV0GACAYqTEJx5PP/20fv31V+3Zs0ddunSxOWYYhnr27OmgyAAAAIDSo8SvajVy5Ei1bt1apmlme7Vs2VKjRo1ydIgAAABAiVfiezzKlCmjzZs367333tOaNWsUGxsrPz8/de7cWSNGjFCZMmUcHSIAAABQ4pX4xEOSPDw8NG7cOI0bN87RoQAAAAClUokfanXo0CGtWbNGERERNuURERFas2aNDh06VOBzzp49W3Xr1pWnp6eaN2+uHTt25Fk/JSVFEydOVEBAgDw8PFSvXj0tWLCgwNcFAAAAiqsSn3gEBQWpW7du2Ta7+uOPP9StWzeNGTOmQOdbvny5Ro0apYkTJ2rPnj1q27atOnbsqKioqFzb9OjRQ1u2bFFYWJh+//13LVu2TI0aNSrU/QAAAADFUYkfavXbb79Jkjp06GBT3r59e5mmqb179xbofDNnztSgQYM0ePBgSZkbE27cuFFz5sxRSEhItvobNmzQtm3bdPToUVWuXFmSVKdOnYLfCAAAAFCMlfgej6yNAr28vGzKPT09bY7nR2pqqiIiIrIlMR06dNCuXbtybLNmzRq1aNFCb731lmrWrKkGDRpo7NixSkpKyvU6KSkpSkhIsHkBAAAAxVmJTzwqVqwoSfrmm29sytetW2dzPD8sFovS09Pl5+dnU+7n56czZ87k2Obo0aPauXOnDhw4oFWrVik0NFSff/65nn/++VyvExISIm9vb+vL398/3zECAAAAzqjED7W68847tXnzZj377LP666+/FBgYqAMHDmj69OkyDEN33nlngc9pGIbNe9M0s5VlycjIkGEYWrp0qby9vSVlDtd6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Y3zs2DFrWZMmTewXIEq8MmXK6LnnnpMkzZo1SytXrtTp06dVtmxZDRo0qNDnHTBgQK6LxcD+SDxQ6nz88ccyDEPVqlXTxo0bVb58eb3++ut69tlnC3W+xYsXa+bMmdn+yJqmqe+++06PPfaYEhMTb0boKGGynkUvLy8NGTLEWt6jRw+1bt26wOf7+7fSgD3l1EN3bRnPI27U0KFD5e7urqNHj+qFF16QJPXu3Vu33HKLgyNDYZF4oNRLT0/X5cuXC90+a8jLgQMHdPLkSX322Wd6+umnrcdPnDihH3744WaEihKsfPnyuuuuu/T+++/r008/zVebffv2WX/29vZW5cqV7RUeSplrh5EePXo02/GMjAybeXFZi2jUq1fPWkZvL26Un5+fnnrqKUmy9ugOHz78hs6Z0+Rylh0vOiQeKHX69++vtLQ07dy5U35+fkpKSlJISIjNyhn5lZKSopSUFOv7WrVqqWfPnlq2bJnat29vLWcIDHKStapV1mpVP/74o4YPHy5XV9frtk1LS9PMmTOt7zt37iwXF36l4+bo2LGj9eeFCxdmO/7FF19YJ/y6u7vr/vvvlyR16dLFWufbb7/VTz/9lOP509LSbmK0KMmyejqkzNX9mjZt6sBocKP4K4VSydXVVa1bt9aHH35oLXv55ZdlsVgKdJ6TJ0+qTp06mjBhgnbt2qWEhASlpKTo+++/12+//Watx1hn3CyJiYnatm2bOnToYP1Q5+3trUmTJuVYPzo6Whs2bMj2SkpKKsqwUcyMGTNG3t7ekjJ71gYPHqzo6GilpKTom2++sfnWecSIEdblddu3b6+HH35YUuawq27dumnlypVKSEhQcnKy9uzZo6CgIL388stFf1Molu666y4NGzZMXbp00cSJEx0dDm4Qy0qgVOvatavatWunrVu3Kj4+XpMnTy5wz8eZM2cUEhKikJCQHI/36NHDZhIwUBjbtm3Lccx8zZo1tWLFCpshLtfavHmzNm/enK382LFjNpODgWvVqlVLq1at0pNPPqnz588rLCxMYWFh2er16NEj2+++5cuXWzcQPH36tHr06JGt3ciRI+0WO0qeWbNm5avetSv70QPsnPivglJvxowZ1g90c+fO1eHDh/PdtmbNmpo3b5569eqlf/zjH/L19ZWbm5sqVqyou+66S++8846WLFlir9BRyhiGobJly6p2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uockNzcX2dnZOomPXjwymUx63apVK6XzRkZGaNmypfS+vMc4NTVVKuvYsaPuAqTnXr169fDxxx8DANauXYsdO3YgPT0d9evXR0BAgNbtfvjhhxUuFkO6x8SDXjgbN26EIAiwt7fHoUOH0LBhQyxZsgQTJ07Uqr1NmzYhLCxM6ZesKIo4duwY3nrrLTx69KgmQqfnTPln0cLCAh999JFU7uvrCw8PD43be/ZbaSJdUtVD93QZP49UXYGBgTA1NcWff/6J6dOnAwDef/99NG7cWM+RkbaYeNALr6SkBA8fPtT6+vIhLxcvXkRaWhq2bduGd999Vzp/+/ZtnDp1qiZCpedYw4YN0b17d6xZswZbtmxR65oLFy5Ir62srNCkSRNdhUcvmKeHkf75559K50tLSxXmxZUvotG6dWupjL29VF12dnZ45513AEDq0Z06dWq12lQ1uZzLjtceJh70whk7diyKi4uRlJQEOzs75OfnIzQ0VGHlDHUVFhaisLBQet+iRQv4+flh69atGDhwoFTOITCkSvmqVuWrVf3yyy+YOnUqjI2Nq7y2uLgYYWFh0vu3334bRkb8kU41w8vLS3q9YcMGpfM7d+6UJvyampqif//+AABvb2+pzs8//4xff/1VZfvFxcU1GC09z8p7OoCy1f06deqkx2iouvhbil5IxsbG8PDwwLp166SyuXPnQi6Xa9ROWloaWrZsiS+++ALJycnIzc1FYWEhTp48ifPnz0v1ONaZasqjR4+QmJgIT09P6Y86KysrzJ8/X2X9O3fu4ODBg0pHfn5+bYZNdcysWbNgZWUFoKxnbcKECbhz5w4KCwvx73//W+Fb52nTpknL6w4cOBCDBw8GUDbsysfHBzt27EBubi4KCgpw9uxZBAcHY+7cubX/UFQnde/eHZMnT4a3tzfmzJmj73ComrisBL3QRowYgTfeeAMJCQnIycnBggULNO75yMzMRGhoKEJDQ1We9/X1VZgETKSNxMRElWPmHRwcsH37doUhLk87cuQIjhw5olSempqqMDmY6GktWrTA7t27MXr0aNy/fx/R0dGIjo5Wqufr66v0sy82NlbaQDA9PR2+vr5K182YMUNnsdPzZ+3atWrVe3plP/YAGyb+r9ALb8WKFdIfdFFRUbh69ara1zo4OGD9+vV477338Morr8DGxgYmJiawtLRE9+7dsXLlSvz444+6Cp1eMIIgoH79+nBycsLAgQMRHh6OS5cucddy0on+/fvj0qVL+OKLL/Daa6+hYcOGqFevHpo1awZvb2/s3bsXsbGxqFevnsJ1VlZWOHz4MHbs2AFvb280b94cpqamaNy4MTp16oSgoCCtF/MgqsiDBw+QkZEhvbe2ttZjNFQRQdRk4XgiIiIiIgORlZWFxMREREZGSvvJ2NraIj09Xa35clS7ONSKiIiIiOqk5ORkheF8giAgLCyMSYeBYuJBRERERHWWsbExrK2t0aNHDwQFBUmrrJHh4VArIiIiIiLSOU4uJyIiIiIinWPiQUREREREOsfEg4iIiIiIdI6JBxERERER6RwTDyIiIiIi0jkmHkREREREpHNMPIiIiIiISOeYeBARERERkc79PzEeKemUK/efAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x1000 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Single plot for all scalar metrics, in a column\n",
    "metrics_to_plot = [\"neighbor_kept_ratio\", \"global_score\", \"rta_all\", \"dist_corr\"]\n",
    "metrics_labels = [\"Neighborhood Kept Ratio\", \"Global Score\", \"Random Triplet Accuracy\", \"Distances Spearman Correlation\"]\n",
    "\n",
    "colors = [\n",
    "    \"#0072B2\",  # blue\n",
    "    \"#E69F00\",  # orange\n",
    "    \"#009E73\",  # bluish green\n",
    "    \"#CC79A7\"   # reddish purple\n",
    "]\n",
    "legend_patches = [mpatches.Patch(color=colors[i], label=algo.upper()) for i, algo in enumerate(algo_names)]\n",
    "\n",
    "fig, axs = plt.subplots(len(metrics_to_plot), 1, figsize=(8, 10))\n",
    "for i, metric in enumerate(metrics_to_plot):\n",
    "    for j, dataset in enumerate(datasets_names):\n",
    "        for k, algo in enumerate(algo_names):\n",
    "            df = scalar_metrics_df[(scalar_metrics_df[\"dataset\"] == dataset) & (scalar_metrics_df[\"algo\"] == algo)]\n",
    "            mean,std = df[metric].values[0]\n",
    "            axs[i].bar(j + k * barwidth, mean, yerr=std, width=barwidth, label=f\"{algo}\", color = colors[k], edgecolor='black')\n",
    "    axs[i].set_xticks(np.arange(n_datasets) + barwidth * (n_algos - 1) / 2)\n",
    "    axs[i].set_xticklabels([w.upper() for w in datasets_names], fontsize = 12, fontweight='bold')\n",
    "    axs[i].set_ylabel(tw.fill(metrics_labels[i], 15), fontsize = 12, fontweight='bold')\n",
    "\n",
    "axs[0].legend(handles=legend_patches, loc=\"upper center\", bbox_to_anchor=(0.5, 1.3), ncols=4, fontsize = 14)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"images/scalar_metrics_comparison.png\", dpi=300, bbox_inches='tight')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Metrics at rank k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "metrics_at_k = [\"t_values\", \"c_values\", \"lcmc_values\"]\n",
    "at_k_metrics = evaluation_results_df[[\"dataset_algo\"] + metrics_at_k]\n",
    "at_k_metrics[\"dataset\"] = at_k_metrics[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[0])\n",
    "at_k_metrics[\"algo\"] = at_k_metrics[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[1])\n",
    "at_k_metrics[\"run\"] = at_k_metrics[\"dataset_algo\"].apply(lambda x: x.split(\"_\")[2].replace(\"run\", \"\")).astype(int)\n",
    "\n",
    "at_k_metrics.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "k_values = np.arange(0,len(at_k_metrics[\"t_values\"].values[0]))\n",
    "k_metrics_handles = []\n",
    "k_metrics_colors = plt.cm.get_cmap(\"tab20\", len(algo_names) * len(datasets_names))\n",
    "\n",
    "fig, axs = plt.subplots(3, len(datasets_names), figsize=(16, 8))\n",
    "\n",
    "for d,dataset in enumerate(datasets_names):\n",
    "    for i,algo in enumerate(algo_names):\n",
    "        k_metrics_handles.append(f\"{dataset}_{algo}\")\n",
    "        df = at_k_metrics[(at_k_metrics[\"dataset\"] == dataset) & (at_k_metrics[\"algo\"] == algo)]\n",
    "        t_values = df[\"t_values\"].values\n",
    "        c_values = df[\"c_values\"].values\n",
    "        lcmc_values = df[\"lcmc_values\"].values\n",
    "        for j in range(len(t_values)):\n",
    "            axs[0,d].scatter(k_values, t_values[j], color=colors(i), linestyle='-', marker='x', s=1)\n",
    "            axs[1,d].scatter(k_values, c_values[j], color=colors(i), linestyle='-', marker='x', s=1)\n",
    "            axs[2,d].scatter(k_values, lcmc_values[j], color=colors(i), linestyle='-', marker='x', s=1)\n",
    "        \n",
    "plt.suptitle(\"Metrics at K\", fontsize = 14, fontweight='bold')\n",
    "axs[0,0].set_ylabel(\"Trustworthiness\", fontsize = 12, fontweight='bold')\n",
    "axs[1,0].set_ylabel(\"Continuity\", fontsize = 12, fontweight='bold')\n",
    "axs[2,0].set_ylabel(\"LCMC\", fontsize = 12, fontweight='bold')\n",
    "# Shared x axis labels\n",
    "for ax in axs.flat:\n",
    "    ax.set_xlabel(\"K\", fontsize = 12, fontweight='bold')\n",
    "\n",
    "axs[0,3].legend(handles=legend_patches, loc=\"upper left\", bbox_to_anchor=(1, 1))\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dr_eval",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
